home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ForCLI / 0Utils13.lha / 0Utils / IconR.c < prev    next >
C/C++ Source or Header  |  1995-04-09  |  5KB  |  196 lines

  1.  
  2. /******************************************************************************
  3.  
  4.     MODULE
  5.     IconR.c
  6.  
  7.     DESCRIPTION
  8.     IconX replacement (should be compatible 2 IconX)
  9.  
  10.     NOTES
  11.     Kickstart 2.0+ required
  12.     compiles w/ SAS/C v6.51
  13.  
  14.     BUGS
  15.     none known
  16.  
  17.     TODO
  18.  
  19.     EXAMPLES
  20.  
  21.     SEE ALSO
  22.  
  23.     INDEX
  24.  
  25.     HISTORY
  26.     20-02-95 b_noll created
  27.     21-02-95 b_noll added version/format-prefix/offset
  28.     20-03-95 b_noll added args diagnostics
  29.  
  30.     AUTHOR
  31.     Bernd Noll, Brunnenstrasse 55, D-67661 Kaiserslautern
  32.     b_noll@informatik.uni-kl.de
  33.  
  34. ******************************************************************************/
  35.  
  36. /**************************************
  37.         Includes
  38. **************************************/
  39.  
  40. #ifndef   EXEC_LIBRARIES_H
  41. # include <exec/libraries.h>
  42. #endif /* EXEC_LIBRARIES_H */
  43.  
  44. #ifndef   CLIB_EXEC_PROTOS_H
  45. # include <clib/exec_protos.h>
  46. #endif /* CLIB_EXEC_PROTOS_H */
  47.  
  48. #ifndef   DOS_DOS_H
  49. # include <dos/dos.h>
  50. #endif /* DOS_DOS_H */
  51.  
  52. #ifndef   CLIB_DOS_PROTOS_H
  53. # include <clib/dos_protos.h>
  54. #endif /* CLIB_DOS_PROTOS_H */
  55.  
  56. #include <proto/dos.h>
  57. #include <proto/exec.h>
  58.  
  59. /* ******************** USER INCLUDES ******************** */
  60.  
  61. #include <dos/dostags.h>
  62.  
  63. /* ******************** USER INCLUDES ******************** */
  64.  
  65. /**************************************
  66.      Defines & Structures
  67. **************************************/
  68.  
  69. #ifndef ABSEXECBASE
  70. #define ABSEXECBASE ((struct ExecBase **)4L)
  71. #endif
  72.  
  73. struct _arg {
  74. /* ******************** USER FORMAT ******************** */
  75.  
  76. #define FORMAT "COMMAND/F"
  77.  
  78.     STRPTR command;
  79.  
  80. /* ******************** USER FORMAT ******************** */
  81. }; /* struct _argv */
  82.  
  83. #define MAXPATHLEN 256
  84. #define MAXLINELEN 256
  85.  
  86. #define VERSIONPREFIX    "\0$VER: "
  87. #define VERSIONOFFSET    0
  88. #define FORMATPREFIX    "\0$ARG: "
  89. #define FORMATOFFSET    7
  90.  
  91. /**************************************
  92.         Implementation
  93. **************************************/
  94.  
  95. long _main (void)
  96. {
  97.     const char* version = VERSIONPREFIX "IconR 1.0 " __AMIGADATE__  + VERSIONOFFSET;
  98.     long retval = RETURN_FAIL;
  99.     struct ExecBase*SysBase = *ABSEXECBASE;
  100.     struct Library* DOSBase = NULL, *IconBase = NULL;
  101.     struct WBStartup *wbs;
  102.     struct Process *pr = FindTask(NULL);
  103.  
  104.     /* ---- No CLI-Start allowed! */
  105.     if (pr->pr_CLI)
  106.     return 20;
  107.  
  108.     /* ---- Get WBStartup argument */
  109.     WaitPort (&pr->pr_MsgPort);
  110.     while (!(wbs = (struct WBStartup *)GetMsg(pr->pr_MsgPort)));
  111.     //Remove (&wbs->sm_Message.mn_Node);
  112.  
  113.     do {
  114.     /* ---- Open libraries */
  115.     if (!(DOSBase = OpenLibrary (DOSNAME, 37)))
  116.         break;
  117.     if (!(IconBase = OpenLibrary("icon.library", 37)))
  118.         break;
  119.  
  120.     do {
  121.         /* /K */
  122.         if (!(winname = FindToolType (..., "WINDOW")))
  123.         winname = StrDup(owinname = "CON:0/50//80/IconR/AUTO/CLOSE/WAIT");
  124.  
  125.         /* /K/N */
  126.         if (!(stacksizestr = FindToolType(..., "STACK")) ||
  127.         !(stacksize = atol(stacksizestr)))
  128.             stacksize = 4000;
  129.  
  130.         /* /K/T */
  131.         if (!(usershell = FindToolType(..., "USERSHELL")))
  132.         ;
  133.  
  134.         /* /K/T */
  135.         if ((owinname) && (!(dowait = FindToolType(...,"WAIT")) || !MatchToolValue(dowait, "YES")))
  136.         StrDel(winname,...,...);
  137.  
  138.         /* /K/T */
  139.         if ((owinname) && (!(dowait = FindToolType(...,"DELAY")) || !MatchToolValue(dowait, "YES")))
  140.         StrDel(winname,...,...);
  141.  
  142.         /* new suggested tooltypes:
  143.         CLIARGS     added to clicommand before file arguments /* /K/M */
  144.         CLICOMMAND  replaces filename                  /* /K/M */
  145.         EXECUTE=YES use or don't use Execute                  /* /K/T */
  146.         FAILAT=xx   instead of 100                  /* /K/N */
  147.         REXX        do sendrexx instead of System()           /* /K/T */
  148.         */
  149.         /*
  150.         current template string is
  151.         "FailAt 100
  152.         Execute \"%s\""
  153.         */
  154.  
  155.         if (!(iostream = Open (winname, MODE_READWRITE))) {
  156.  
  157.         } /* if */
  158.  
  159.         createcommandstring();
  160.  
  161.  
  162.         retval = SystemTags (command,
  163.         SYS_Input,  iostream,
  164.         SYS_Output, NULL,
  165.         //SYS_Asynch, TRUE,
  166.         SYS_UserShell, ...,
  167.         TAG_END);
  168.  
  169.     } while (0);
  170.  
  171.     /* ---- Free Temp Data */
  172.     if (iostream)
  173.         Close (iostream);
  174.     if (winname)
  175.         Free(winname);
  176.     if (command)
  177.         Free(command);
  178.  
  179.     } while (0);
  180.  
  181.     /* ---- close libraries */
  182.     if (IconBase)
  183.     CloseLibrary (IconBase);
  184.     if (DOSBase)
  185.     CloseLibrary (DOSBase);
  186.  
  187.     /* ---- Reply WBStartup Msg (Forbid() prevents WB from UnLoadSeg()'ing us before rts is called) */
  188.     Forbid();
  189.     ReplyMsg (&wbs->sm_Message);
  190.     return 0;
  191. } /* _main */
  192.  
  193. /******************************************************************************
  194. *****  END IconR.c
  195. ******************************************************************************/
  196.